package controller;

import helper.AbstractAction;
import helper.ParseUtil;

import java.awt.event.ActionEvent;

import javax.swing.JOptionPane;

import view.BankView;
import view.EinAuszahlenDialog;
import bank.Kunde;


public class EinAuszahlenDialogController {

    private final BankHandler bankHandler;
    private final BankView bankView;

    private EinAuszahlenDialog dialog;

    public EinAuszahlenDialogController(BankHandler aBankHandler, BankView aBankView) {
        bankHandler = aBankHandler;
        bankView = aBankView;
    }

    public void start() {
        dialog = new EinAuszahlenDialog(bankView, true);
        dialog.getBtKontostand().addActionListener(new KontostandAnzeigenAction());
        dialog.getBtEnde().addActionListener(new BeendenAction());
        dialog.getBtAuszahlung().addActionListener(new AuszahlenAction());
        dialog.getBtEinzahlung().addActionListener(new EinzahlenAction());
    }


    // Inner Classes ***********************************************************

    private class KontostandAnzeigenAction extends AbstractAction {
		@Override
		protected void execute(ActionEvent aEvent) throws Exception {
            int kontoNummer = ParseUtil.parseKontonummer(dialog.getTfKontonummer().getText());

        	Kunde kunde = bankHandler.getKundeByKontoNummer(kontoNummer);
    		double ktoStand = kunde.getKontostand(kontoNummer);

    		JOptionPane.showMessageDialog(dialog, "Kontostand: " + ktoStand);
    		dialog.getTfAlterKontostand().setText("" + ktoStand);
		}
    }

    private class BeendenAction extends AbstractAction {
		@Override
		protected void execute(ActionEvent aEvent) throws Exception {
            dialog.dispose();
		}
    }

    private class AuszahlenAction extends AbstractAction {
		@Override
		protected void execute(ActionEvent aEvent) throws Exception {
            int kontoNummer = ParseUtil.parseKontonummer(dialog.getTfKontonummer().getText());
	        double betrag = ParseUtil.parseBetrag(dialog.getTfBetrag().getText());

            double alterKontostand = bankHandler.getKundeByKontoNummer(kontoNummer).getKontostand(kontoNummer);
            double neuerKontostand = bankHandler.getKundeByKontoNummer(kontoNummer).auszahlenBetrag(kontoNummer, betrag);

            dialog.getTfAlterKontostand().setText(Double.toString(alterKontostand));
            dialog.getTfNeuerKontostand().setText(Double.toString(neuerKontostand));
		}
    }

    private class EinzahlenAction extends AbstractAction {
		@Override
		protected void execute(ActionEvent aEvent) throws Exception {
            int kontoNummer = ParseUtil.parseKontonummer(dialog.getTfKontonummer().getText());
            double betrag = ParseUtil.parseBetrag(dialog.getTfBetrag().getText());

            double alterKontostand = bankHandler.getKundeByKontoNummer(kontoNummer).getKontostand(kontoNummer);
            double neuerKontostand = bankHandler.getKundeByKontoNummer(kontoNummer).einzahlenBetrag(kontoNummer, betrag);

            dialog.getTfAlterKontostand().setText(Double.toString(alterKontostand));
            dialog.getTfNeuerKontostand().setText(Double.toString(neuerKontostand));
		}
    }
}
